/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package cz.vse.adventura.po1715.xshet00_shevtsova.gui;

import cz.pecinovsky.english.pojj.adv_framework.game_gui.IObjectG;
import cz.pecinovsky.english.pojj.adv_framework.game_txt.INamed;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Icon;
import javax.swing.JButton;

/*******************************************************************************
 * Instance třídy {@code PrvekPanelu} představují komponenty
 * sloužící k zobrazení jim zadaného objektu.
 * <br><br>
 * Vylepšení změnilo předka z {@code JLabel} na {@code JButton} a
 * přidalo dva další konstruktory s parametrem specifikujícím název příkazu.
 * Tím umožnilo definovat definovat prvky jako tlačítka, po jejichž stisku
 * se provede příslušná akce.
 *
 * @author TShevtsova
 */
@SuppressWarnings("serial")
public class PrvekPaneluBtn extends JButton
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    /** Název zobrazovaného prvku. */
    private final String popisek;



//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří komponentu zobrazující název zadaného předmětu
     * spolu s jeho obrázkem.
     *
     * @param předmět Zobrazovaný předmět
     * @param příkaz  Příkaz, který se zadá po stisku tlačítka
     * @param gui     GUI, jehož prostřednictvím ovládáme hru
     */
    public PrvekPaneluBtn(IObjectG předmět, String příkaz, IMojeGUI gui)
    {
        this(předmět, null, předmět.getPicture(), příkaz, gui);
        setToolTipText(popisek);
    }


    /***************************************************************************
     * Vytvoří komponentu zobrazující název zadaného pojemnovaného objektu
     * (většinou místnosti).
     *
     * @param objekt Zobrazovaný objekt
     * @param příkaz Příkaz, který se zadá po stisku tlačítka
     * @param gui    GUI, jehož prostřednictvím ovládáme hru
     */
    public PrvekPaneluBtn(INamed objekt, String příkaz, IMojeGUI gui)
    {
        this(objekt, objekt.getName(), null, příkaz, gui);
    }


    /***************************************************************************
     * Vytvoří komponentu zobrazující název zadaného pojemnovaného objektu
     * (většinou místnosti).
     *
     * @param objekt Zobrazovaný objekt
     * @param název
     * @param obrázek
     * @param příkaz Příkaz, který se zadá po stisku tlačítka
     * @param gui    GUI, jehož prostřednictvím ovládáme hru
     */
    private PrvekPaneluBtn(INamed objekt, String název, Icon obrázek,
                           final String příkaz, final IMojeGUI gui)
    {
        super(název, obrázek);
        popisek = objekt.getName();

        addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                gui.executeCommand(příkaz + " " + popisek);
            }
        });
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================

    /***************************************************************************
     * Vrátí název zobrazovaného objetku.
     *
     * @return Název zobrazovaného objetku
     */
    public String getNázev()
    {
        return popisek;
    }



//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        PrvekPanelu inst = new PrvekPanelu();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
